package com.ruoyi.biz.service.impl;

import java.util.List;

import cn.dev33.satoken.stp.StpUtil;
import com.ruoyi.biz.domain.BizClassRelevanceStudent;
import com.ruoyi.biz.mapper.BizClassRelevanceStudentMapper;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import com.ruoyi.biz.mapper.BizClassMapper;
import com.ruoyi.biz.domain.BizClass;
import com.ruoyi.biz.service.IBizClassService;

import javax.annotation.Resource;

/**
 * 班级Service业务层处理
 * 
 * @author lhb
 * @date 2025-02-02
 */
@Service
public class BizClassServiceImpl implements IBizClassService 
{
    @Resource
    private BizClassMapper bizClassMapper;

    @Resource
    private BizClassRelevanceStudentMapper bizClassRelevanceStudentMapper;

    @Override
    public Boolean joinClass(String classNumber) {
        //1.根据班级码查询出班级信息
        BizClass bizClass = bizClassMapper.selectByClassNumber(classNumber);
        if(ObjectUtils.isEmpty(bizClass)){
            throw new BaseException("班级码不存在");
        }

        //2.组装班级与学生关系对象
        BizClassRelevanceStudent relevanceStudent = new BizClassRelevanceStudent();
        relevanceStudent.setClassId(bizClass.getId());
        relevanceStudent.setCourseId(bizClass.getCourseId());
        long loginId;
        try{
            loginId = StpUtil.getLoginIdAsLong();
        }catch (Exception e){
            throw new BaseException("请先登录");
        }
        relevanceStudent.setStudentId(loginId);

        //3.保存班级与学生关系
        //判断是否已经加入该班级
        BizClassRelevanceStudent relevanceStudent1 = bizClassRelevanceStudentMapper.selectByClassIdAndStudentId(bizClass.getId(), loginId);
        if(ObjectUtils.isNotEmpty(relevanceStudent1)){
            throw new BaseException("已加入该班级");
        }

        int i = bizClassRelevanceStudentMapper.insertBizClassRelevanceStudent(relevanceStudent);
        return i > 0;
    }

    /**
     * 查询班级
     * 
     * @param id 班级主键
     * @return 班级
     */
    @Override
    public BizClass selectBizClassById(Long id)
    {
        return bizClassMapper.selectBizClassById(id);
    }

    /**
     * 查询班级列表
     * 
     * @param bizClass 班级
     * @return 班级
     */
    @Override
    public List<BizClass> selectBizClassList(BizClass bizClass)
    {
        Long userId = SecurityUtils.getUserId();
        return bizClassMapper.selectBizClassList(userId);
    }

    /**
     * 新增班级
     * 
     * @param bizClass 班级
     * @return 结果
     */
    @Override
    public int insertBizClass(BizClass bizClass)
    {
        bizClass.setCreateTime(DateUtils.getNowDate());
        return bizClassMapper.insertBizClass(bizClass);
    }

    /**
     * 修改班级
     * 
     * @param bizClass 班级
     * @return 结果
     */
    @Override
    public int updateBizClass(BizClass bizClass)
    {
        bizClass.setUpdateTime(DateUtils.getNowDate());
        return bizClassMapper.updateBizClass(bizClass);
    }

    /**
     * 批量删除班级
     * 
     * @param ids 需要删除的班级主键
     * @return 结果
     */
    @Override
    public int deleteBizClassByIds(Long[] ids)
    {
        return bizClassMapper.deleteBizClassByIds(ids);
    }

    /**
     * 删除班级信息
     * 
     * @param id 班级主键
     * @return 结果
     */
    @Override
    public int deleteBizClassById(Long id)
    {
        return bizClassMapper.deleteBizClassById(id);
    }
}
